Many purchasers, users, and manufacturers of computer products are becoming increasingly sensitive to issues of power consumption. In some cases, consumers desire to lower their energy bills. Consumers may also prefer processing systems that generate less noise and heat, and there is typically a positive relationship between the amount of power consumed by a processing system and the amounts of noise and heat generated by that processing system. In addition, for a battery powered processing system such as a laptop computer, a cellular telephone (“cell phone”), a personal digital assistants (PDAs), etc., reducing the power consumption has the valuable effect of increasing the processing system's battery life (i.e., increasing the amount of time the processing system can be used before the battery must be recharged or replaced with a fresh battery).
A typical processing system includes many different components, such as a processor or microprocessor, a data storage device, and various input/output (I/O) devices. When a processing system is not off, each component within the processing system may consume some power. The terms “system power state” and “global power state” both refer to the aggregate power consumption of all of the components in a processing system. The term “device power state” refers to the power consumption of a particular component. Typically, the processor is one of the most significant consumers of power in a processing system. The term “processor power state” refers specifically to the power consumption of a processor or microprocessor.
One approach to managing performance is to use a static prediction of performance needs. For instance, a developer of an end user application may initially determine through experimentation that certain functions or tasks of the application typically require a certain amount of processing power. The result of the experimentation may be considered static profiling information. The developer may then design the application to modify the performance level of the processing system before executing those functions or tasks. Such a software application thus manages the system performance based on the predicted needs.
Also, an operating system (OS) may schedule and run software entities such as processes, threads, and tasks, and the scheduler in the OS may include an application programming interface (API) that provides loading information pertaining to those processes, threads, and tasks. Other software programs can call that API to retrieve the loading information. The loading information may include, for instance, the total number of active processes, threads, and tasks. The programs that may obtain loading information from the OS scheduler may include power management software or debugging software, for example.
Static techniques for managing power present many disadvantages. For example, in a typical case, development of the software application will be made more difficult, because expected processing power requirements must be predicted by the developer, based on the previous analysis done, and then handled within the application. Furthermore, the predicted processing power requirements may differ substantially from the actual processing power requirements. Also, when a developer is attempting to design an application to handle the expected processing power requirements, the tools available for that application for modifying the system's performance level may be limited to the tools provided by a particular OS. This same limitation may apply to programs that obtain loading information from an OS API. Further, static analysis may not yield adequate power savings.